<?php
error_reporting(E_ALL);
set_time_limit(0);
/**
 *
 * @author Ufuk Bağcı - Fatih Camuz
 * @category Wordpress 3.x Topic Bots
 * @copyright Her Hakkı Saklıdır.
 * dl4all üzerinden konu çeker ve sisteme kaydeder. Wordpress 3.x Çatısını kullanarak sistem uygun konu ekleme yapar.
 * Bu Kod fatih Camuz için yazılmıştır.
 * @todo  Singleton Pattern Eklendi.
 * @todo  
 * 
 * 
 * 
 */

require_once 'Interface.php';
require_once '../wp-load.php';
class Bot implements WPBot {

    const version = "0.1.0";
    public $config = array(); //Curl Ayarları
    public $link ;         //URL
    public $user_agent;    //HTTP User Agent 
    public $wrapper ;      //Boş
    public $referer  = "www.google.com.tr" ;      //Referans URL
    public $wp_category ;  
    public $myPost = array(); 
    public static $instance; 
      /**
      * Sürüm Kontrolü
      *  @return exit
      */
    public function __construct()
    {
        if (PHP_VERSION > "5.0.0"):
            else:
                exit("Bu Sınıf Sadece PHP5 ve üst sürümlerde çalışır.");
            endif;
           
    }

    /**
    *  Curl ile verilen siteye bağlanır.
    *  @return URL 
    *
    * 
    * @param mixed $opt
    */
    
     
     //Class bir kopyası ram'de yoksa  sınıfı yeniden oluştur. varsa oluşturma kopyasını al .
     public static function getInstance()
        {
            if(!isset(self::$instance)) {
                self::$instance = new Bot();
            }
            return self::$instance;
        }
 
    private function _connect()
    {
       

       if(! extension_loaded('curl'))
       {
           exit("Curl Yüklü Değil");
       }    
      
           $this->config = array(
              CURLOPT_BINARYTRANSFER => true,
              CURLOPT_REFERER        => $this->referer,
              CURLOPT_RETURNTRANSFER => true,
              CURLOPT_USERAGENT      => 'Googlebot/2.1 (+http://www.google.com/bot.html)',
              CURLOPT_URL            => $this->link,
              CURLOPT_FOLLOWLOCATION => true
               );
        $this->wrapper = curl_init();
        curl_setopt_array($this->wrapper,$this->config);
        $data = curl_exec($this->wrapper);
        return $data ;
        
        
    }
       
      /**
      *  Program Kategorisindeki konuları çeker
      * 
      * @param mixed $link
      */
    public function GetAllTopics()
    {
        //Link belirtiyoruz.     
        //Curl ile bağlanıyoruz.
        $site = $this->_connect();
        //Siteden <h1> Tagını alıyoruz 
        preg_match_all('#<h1>(.*?)</h1>#si',$site,$baslik);
        //Resim Alıyoruz
        //preg_match_all("#<!--dle_image_begin:(.*?)\|-->#si",$site,$resim);
        //İçerik Alınıyor 
       // preg_match_all('#<!--dle_image_end-->(.*?)<style type=\"text\/css\">#si',$site,$icerik);
        //Konunun Linki alınıyor . 
        /*
        * Konu Linki Alınıyor ve konudaki resimler ve linkler alınıyor .
        * @return string $back  
        */
        $linkler = implode("",$baslik[1]);
        preg_match_all('/href=\"(.*?)\"/i',$linkler,$back);

        //Linkleri teker teker açıp içinden download linklerini alalım .  
                 
        for($i=0; $i< count($back[1]); $i++)
        {
            if(empty($back[1][$i])) :
            else:
           $this->link = $back[1][$i]; 
           $data  = $this->_connect();
           preg_match_all('#<h1>(.*?)</h1>#si',$data,$Title);
           preg_match_all("#<!--dle_image_begin:(.*?)\|-->#si",$data,$Resim);
           preg_match_all('#<!--dle_image_end-->(.*?)<style type=\"text\/css\">#si',$data,$Desc);

           $title = $Title[1][0];
           $image = $Resim[1][0];
           $description  = $Desc[1][0];
            
         $die =  preg_replace('#<a href=\"http://www.dl4all.com/(.*?)\" target=\"_blank\">(.*?)</a>#si','_clean',$description);
                /* @var $temiz string */
         $temiz = strip_tags($die,'<p><img><h1><b><h2><h3><h4><strong><em><a><br>');
                 //Filtreleme yaptıkdan sonra if ile kontrol ettik.
                if(stripos($die,'_clean')!== false)  :
                else:
                    //Veriyi Kontrol edelim .
                    //TODO : Wordpress Kontrol ekle :D  
                    /* @var $link URL */
                   //TODO: Linkleri code taglari arasına al
                   //TODO: Konu Ekleme olayını düzenle.
                    
                    //Wordpress Konu ekleme ayarları.     
                    $this->myPost['post_title'] = $title;
                    $this->myPost['post_status'] = 'publish';
                    $this->myPost['post_type']  = 'post';
                    $this->myPost['post_author'] = 1;
                    $this->myPost['post_content'] = '<p style="text-align: center;"><img src="'.$image.'" alt="'.$title.'"  title="'.$title.'" width="400" />
                                                        </p>
                                                        <!--more-->
                                                        <p style="text-align: center;">
                                                        '.$description.'
                                                        </p>'; 
                   $this->myPost['post_category'] = array($this->wp_category);                                       
                      
                   if(!$this->_kontrol($back[1][$i])): 
                        //Burası Eğer Linkler var ise Ekleme Yapılıcak kısım.
                       $link_meta = $back[1][$i];  
                       $this->_add_post($this->myPost,$link_meta);
                     
                         echo  "{$i} . Veri Eklendi";
                         echo "<br/>";
                        else:
                         echo "{$i} . Veri Eklenemedi"; 
                         echo "<br>";                    
                    endif;
             
             endif;
            endif;
        }
    }  //FOnksiyon bitiş 
      
    /**
     *
     * @global type $wpdb
     * @param type $link
     * @return boolean 
     */
      private function _kontrol($link)
              {
                 global $wpdb;
                  /* @var $sonuc string */
                  $sonuc = $wpdb->get_results("SELECT * FROM $wpdb->postmeta WHERE meta_value='$link'"); 
                 if(empty($sonuc)):
                       return FALSE;
                 else :
                       return TRUE;
                 endif;                 
              } 
              /**
               *  İstenilen konuyu Wordpress veritabanına ekler.
               * @param array $arr 
               */
              private function _add_post($arr,$link_meta) {
                   /* @var $wpdb Wordpress Database Object */
                    global $wpdb;
                    if(is_array($arr)):
                        $post_id  = wp_insert_post($arr);
                         add_post_meta($post_id,'url',$link_meta);
                    endif;
              }


} //Bitiş
    
   $a =  Bot::getInstance();
   $a->wp_category = 3; //kategoriyi belirtiyoruz :) 
   $a->link = "http://www.dl4all.com/aio/page/8/";
   $a->GetAllTopics();

    /*Sayfa Sonu index.php*/
    /* ./bot/index.php */
    ?>
